// 剩余语法（剩余参数，rest运算符）
// 剩余语法(Rest syntax) 看起来和展开语法完全相同，不同点在于, 剩余参数用于解构数组和对象。从某种意义上说，剩余语法与展开语法是相反的：展开语法将数组展开为其中的各个元素，而剩余语法则是将多个元素收集起来并“凝聚”为单个元素。

// 1. 主要用于不定参数，所以es6开始不再使用arguments对象。
// var demo = function(...arg) {
//   for (const item of arg) {
//     console.log(item)
//   }
// }
// demo(1, 2, 3)
// 1
// 2
// 3

// var demo = function(a, ...arg) {
//   console.log(a)
//   console.log(arg)
// }
// demo(1, 2, 3, 4)
// 1
// [2, 3, 4]

// 2.  配合解构一起使用。
// var [a, ...rest] = [1, 2, 3, 4]
// console.log(a)
// console.log(rest)
// // 1
// [2,3,4]

// var obj = {
//   a: 1,
//   b: 2,
//   c: 3
// }
// var { a, ...demo } = obj
// console.log(a)
// console.log(demo)
// 1
// {b:2,c:3}

function f(...[a, b, c]) {
  console.log(a)
  return a + b + c
}

console.log(f(1)) // 1, NaN
console.log(f(1, 2, 3)) // 1, 6
console.log(f(1, 2, 3, 4)) // 1, 6
